package com.slofzx.nuoda.evaluation.project.util;

import java.math.BigDecimal;

/**
 * Double工具类
 *
 * @author sunfuyong
 */
public class DoubleUtil {
    /**
     * 获取四舍五入后的小数
     *
     * @param value 原始数据
     * @param digit 保留小数位数
     * @return
     */
    public static Double getScale(Double value, int digit) {
        if (value == null) {
            return null;
        }
        return getScale(value, digit, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 获取四舍五入后的小数
     *
     * @param value 原始数据
     * @param digit 保留小数位数
     * @return
     */
    public static double getScale(double value, int digit) {
        return getScale(value, digit, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 获取四舍五入后的小数
     *
     * @param value 原始数据
     * @param digit 保留小数位数
     * @return
     */
    public static String getScaleString(double value, int digit) {
        String result = String.valueOf(getScale(value,digit));
        if(result.endsWith(".0")) {
            result = result.substring(0,result.length()-2);
        }
        return result;
    }

    public static String getScaleStringNew(double value, int digit) {
        String result = String.valueOf(getScale(value,digit));
        return result;
    }

    /**
     * 获取按规则截取的小数
     *
     * @param value        原始数据
     * @param digit        保留小数位数
     * @param roundingMode 取值规则
     * @return
     */
    public static Double getScale(Double value, int digit, int roundingMode) {
        if (value == null) {
            return null;
        }
        return new BigDecimal(value).setScale(digit, roundingMode).doubleValue();
    }

    /**
     * 获取按规则截取的小数
     *
     * @param value        原始数据
     * @param digit        保留小数位数
     * @param roundingMode 取值规则
     * @return
     */
    public static double getScale(double value, int digit, int roundingMode) {
        return new BigDecimal(value).setScale(digit, roundingMode).doubleValue();
    }

    /**
     * Double 加法
     *
     * @param var1
     * @param var2
     * @return
     */
    public static Double add(Double var1, Double var2) {
        if (var1 == null) {
            var1 = 0D;
        }
        if (var2 == null) {
            var2 = 0D;
        }
        return new BigDecimal(var1).add(new BigDecimal(var2)).doubleValue();
    }

    /**
     * Double 减法
     *
     * @param var1
     * @param var2
     * @return
     */
    public static Double subtract(Double var1, Double var2) {
        if (var1 == null) {
            var1 = 0D;
        }
        if (var2 == null) {
            var2 = 0D;
        }
        return new BigDecimal(var1).subtract(new BigDecimal(var2)).doubleValue();
    }

    /**
     * Double 乘法
     *
     * @param var1
     * @param var2
     * @return
     */
    public static Double multiply(Double var1, Double var2) {
        if (var1 == null) {
            var1 = 0D;
        }
        if (var2 == null) {
            var2 = 0D;
        }
        return new BigDecimal(var1).multiply(new BigDecimal(var2)).doubleValue();
    }

    /**
     * Double  除法
     *
     * @param var1
     * @param var2
     * @return
     */
    public static Double divide(Double var1, Double var2) {
        return divide(var1, var2, 2);
    }

    /**
     * Double  除法
     *
     * @param var1
     * @param var2
     * @return
     */
    public static Double divide(Double var1, Double var2, Integer digit) {
        if (var1 == null) {
            var1 = 0D;
        }
        if (var2 == null) {
            var2 = 1D;
        }
        return new BigDecimal(var1)
                .divide(new BigDecimal(var2), digit, BigDecimal.ROUND_HALF_UP)
               .doubleValue();
    }
}
